FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 1
1 ;^Z80^
3 ;NAME ^Rev 6 - DTT^
4
5 DESCR_ MACRO
6 .GOTO ENDESCR_1
7
8 Author: DTT
9 Project: ________, ___
10 Starting date:18feb83
11
12 Prom release Date:
13 Prom release Rev:
14
15 Header Rev: 3
16
17 ********************************
18 * *
19 * TAPE_MANAGER DTT *
20 * *
21 ********************************
22
23 Rev History (one line note indicating the change)
24
25 Rev. Date Name Change
26 6 11/16/83 DTT ADDED DEVICE ID TO SIMULATE DEVICE INDEPENDENCE
27 5 12spt83 DTT MODIFIED ERROR SYSTEM TO WRITE ERRORS TO CSA AREA
28 4 08aug83 DTT SIMULATES WRITES!
29 3 07jul83 DTT ADDED KILL_TAPE/CSA
30 2 30jun83 DTT STATE MACHINE FOR MULTI TASKING
31 1 05apr83 DTT BINK ON I/O ERROR, REMOVING TIMING STUFF, EI AND DI ADDED.
32 0 10feb83 DTT Initial Pseudo Code
33
34 NAME: TAPE_MANAGER (OVERLAY CONTROL)
35
36
37 FUNCTION: (LOAD OVERLAYS VIA SIMULATED I/O WITH THE HP64000)
38
39
40 INPUTS: (ACCUMULATOR = OVERLAY NUMBER)
41
42
43 OUTPUTS: (OVERLAY IS LOADED TO RAM ADDRESS)
44
45
46 PSEUDOCODE: (PASCAL type pseudocode of procedure.)
47
48
49
50 ---------------- overlay request? Y ----------------
51 : :-----------------------> : :
52 :---->: IDLE : : RENAME :
53 : : : : :
54 : : :---------: : :
55 : ---------------- : ----------------
56 : /:\ overlay request? N :
FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 2
57 : :______________: :
58 : :
59 : :
60 : :
61 : :
62 : :
63 : :
64 : \:/
65 : ---------------- ----------------
66 : : : : :
67 : : READ : <--------------------------: OPEN :
68 : : FIRST : : :
69 : : RECORD : : :
70 : ------:--------- ----------------
71 : :
72 : :
73 : \:/
74 : ---------------- ----------------
75 : : :------------------------> : :
76 : : READ : : MOVE DATA :
77 : : DATA : end of file? N : FROM BUFFER :
78 : : RECORD : <--------------------------: TO RAM :
79 : ---------------- --------:-------
80 : :
81 : end of file? Y
82 : \:/
83 : ---------------- ----------------
84 : : : : :
85 -----: PRE IDLE STATE :<---------------------------: CLOSE :
86 :(WAIT FOR CLOSE): : :
87 : : : :
88 ---------------- ----------------
89 ENDESCR_1 MEND
90
91 DESC_a MACRO
92 .GOTO DESC_a
93 ***********************************************************************************************
94 Each transition state looks like this:
95
96
97 from previous
98 =================:
99 state :
100 \:/
101 ----------------: -----------------
102 : : I/O errors? Y : :
103 : TRANSITION :-------------------> : ERROR STATE :
104 :===>: : : (terminate) :----:
105 : : :=====: : : :
106 : ---------------- : ----------:------ :
107 : : : /:\ :
108 : : : : :
109 : sim i/o : \:/ :___________:
110 ------------ ---------------- to state 6
111 function : :============>
112 complete? N : TEST FOR :
113 : ABORT :to state 7
FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 3
114 : REQUEST :============>
115 ----------------
116 no :
117 abort : to next
118 : state
119 \:/
120
121 DESC_a MEND
122
123 DESC_2 MACRO
124 .GOTO DESC_2
125 *
126 ***************************************************************************************
127 *
128
129 COMMON ATTRIBUTE AREAS (COMMUNICATION BUFFER WITH HP)
130 ALL VALUES ARE HEXADECIMAL
131
132 1) ASSIGN FILENAME TO CA
133 CA CA+1 CA+2 CA+n
134 -------- -------- -------- -------- -------- -------- -------- --------
135 : 8A :LENGTH :FILENAME ------> : USER ID : NOT
136 : :BYTE :UP TO 9 BYTES : UP TO 5 BYTES : USED----->
137 -------- -------- -------- -------- -------- -------- -------- --------
138 LENGTH_BYTE := (((((LENGTH OF FILE NAME)+1)/2)-1)*32) + ((LENGTH OF USER ID)/2)*8)
139 FILENAME MUST BE ODD NUMBER OF BYTES LONG MAY BE PADDED WITH ONE SPACE.
140 USER ID MUST BE EVEN NUMBER OF BYTES LONG MAY BE PADDED WITH ONE SPACE.
141
142 2) OPEN
143 CA CA+1 CA+2
144 -------- -------- -------- -------- -------- -------- -------- --------
145 : 81 : 04 : 00 : NOT
146 : : : : USED------------------------------->
147 -------- -------- -------- -------- -------- -------- -------- --------
148 CA+1 MUST BE 04HEX DESIGNATES ABSOLUTE FILE WILL BE OPENED.
149 CA+2 MUST BE 00HEX DESIGNATES DISK NUMBER.
150
151 3) CLOSE
152 CA
153 -------- -------- -------- -------- -------- -------- -------- --------
154 : 82 : NOT
155 : : USED ----------------------------------------------->
156 -------- -------- -------- -------- -------- -------- -------- --------
157
158 4) READ
159 CA CA+1 CA+2 CA+4 CA+6
160 -------- -------- -------- -------- -------- -------- -------- --------
161 : 87 : 80 : #BYTES TO LOAD : N/A : N/A : LOAD ADDRESS
162 : : : MSB : LSB : : : MSB : LSB
163 -------- -------- -------- -------- -------- -------- -------- --------
164 CA+1 DEFINES THE BUFFER LENGTH IN WORDS - 1 MUST BE LOADED BEFORE CALLING SIM I/O
165 CA+2 DEFINES NUMBER OF BYTES TO MOVE TO RAM FROM THE SIM I/O BUFFER
166 CA+6 DEFINES THE RAM ADDRESS TO LOAD TO
167 CA+8 (NOT SHOWN) IS THE START OF THE SIM I/O BUFFER
168 NOTE: CA+2 AND CA+6 ARE ONE WORD LONG BUT NOT STORED AS Z80 WORDS.
169 THE Z80 EXPECTS WORD VALUES TO BE STORED LSB/MSB.
170
FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 4
171 DESC_2
172 MEND
173
174
175
176 NEXT_STATE MACRO LP1
177 LD A,LP1 ;SOMETHING IN THE COMMAND BUFFER!
178 LD [TAPE_STATE],A
179 LD HL,[STATE_VECTORS+LP1+LP1]
180 LD [NEXT_STATE_ADDRESS],HL
181 JP END_OF_STATE_MACHINE
182 MEND
183 ;SUBROUTINES CALLED:
184 ; EXT
185
186 ;OPERATING SYSTEM CALLS:
187
188 ;EXTERNAL DATA AREAS USED:
189 EXT KILL_TAPE
190 EXT WRITE_TAPE
191 EXT CSA
192 EXT TAPE_STATE
193 EXT OVERLAY_NUMBER
194
195 ;GLOBAL DATA AREAS DEFINED:
196 GLOBAL DEVICE_ID
197
198 ;LOCAL EQUATES
199 7400 CA EQU 07400H ;COMMON ATTRIBUTES AREA FOR SIM I/O
200 7401 BUF_LEN EQU CA+1
201 7401 FILETYPE EQU CA+1 ;FILETYPE ADDRESS IN C_A_
202 7402 DISC_NUM EQU FILETYPE+1 ;DISK NUMBER ADDRESS IN C_A_
203 7402 REC_LEN EQU CA+2 ;RECORD LENGTH ADDRESS IN C_A_
204 7408 BUFFER EQU CA+8 ;I_O_BUFFER
205 7401 RNAM_BUF EQU CA+1 ;RENAME BUFFER AREA
206 7404 LOADADDR EQU CA+4 ;ADDRESS OF MEM ADDRESS OF OVERLAY
207
208 0080 MAXBUFLN EQU 128 ;UP TO 128 WORDS MAY BE READ IN
209 0004 ABSOLUTE EQU 004H ;FILE TYPE IS ABSOLUTE
210 0081 OPEN EQU 081H
211 0082 CLOSE EQU 082H
212 0087 READ EQU 087H
213 0089 WRITE EQU 089H
214 008A RENAME EQU 08AH
215
216 ;GLOBAL EQUATES
217 ; INCLUDE equate file name
218
219
220 PROG
221 GLOBAL TAPE_MANAGER
222
223 GLOBAL INITIALIZE_TAPE
224 0000' INITIALIZE_TAPE:
225 GLOBAL INIT_TAPE
226 0000' INIT_TAPE:
227 0000' 3E 00 LD A,0 ;CLEAR THE HP64000 AREA
FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 5
228 0002' 32 0074 LD [CA],A
229 0005' 32 0000# LD [CSA],A ;AND THE TAPE CONTROL STATUS AREA
230 0008' 3D DEC A
231 0009' 32 0000# LD [OVERLAY_NUMBER],A ;MAKE THE OVERLAY NUMBER -1 (INVALID)
232 000C' NEXT_STATE 0 ;SET THE IDLE STATE!
233 000C' 3E 00 A LD A,0 ;SOMETHING IN THE COMMAND BUFFER!
234 000E' 32 0000# A LD [TAPE_STATE],A
235 0011' 2A 4100' A LD HL,[STATE_VECTORS+0+0]
236 0014' 22 0000" A LD [NEXT_STATE_ADDRESS],HL
237 0017' C3 6A01' A JP END_OF_STATE_MACHINE
238 001A' C9 RET
239
240 001B' TAPE_MANAGER:
241 ;BEGIN (Ordinarily registers are restored; retain only the pushes and pops you need.)
242
243 001B' 3A 0074 LD A,[CA] ;TEST THE STATUS OF THE FILE
244 001E' B7 OR A
245 001F' FA 6A01' JP M,END_OF_STATE_MACHINE ;IF THERE IS A COMMAND IN THE BUFFER
246 0022' 28 05 JR Z,AB_REQ
247 0024' FE 01 CP 1 ;END OF FILE ON READ FROM HP64000
248 0026' C2 6C01' JP NZ,ERROR
249 ;*
250 ;* AT THIS POINT ANY SIM I/O FUNCTIONS ARE COMPLETE; TEST FOR ABORTS (KILLS)
251 ;*
252 GLOBAL AB_REQ
253 0029' 3A 0000# AB_REQ: LD A,[CSA] ;IF COMMAND IS TO KILL TAPE COMMAND
254 002C' FE ?? CP KILL_TAPE
255 002E' 20 0D JR NZ,CASE_STATE
256 0030' 3A 0000# LD A,[TAPE_STATE] ;CHECK THE STATE OF THE TAPE
257 ;*
258 0033' FE 03 CP 3 ;CHECK STATE 0,1,2
259 0035' DA 3D01' JP C,STATE_PRE_IDLE ;FILE NOT OPENED
260 ;*
261 0038' FE 06 CP 6 ;STATE 3,4,5
262 003A' DA 2A01' JP C,STATE_CLOSE ;FILE OPENED TRY TO CLOSE IT
263 ;*
264 ;* FALL THRU TO CASE STATEMENT ;IF STATE = 6,7
265 ;* ;FILE IS TRYING TO CLOSE
266 ;*
267 ;*
268 ;* CASE TAPE_STATE,(IDLE,RENAME,OPEN,READ1,READ2,MOVE2VRAM,CLOSE,PRE_IDLE)
269 ;*
270 003D' CASE_STATE:
271 ;*
272 ;*
273 003D' 2A 0000" LD HL,[NEXT_STATE_ADDRESS]
274 0040' E9 JP [HL]
275 0041' STATE_VECTORS:
276 0041' 5300' DEFW STATE_IDLE ;STATE 0
277 0043' 6800' DEFW STATE_RENAME ; 1
278 0045' A200' DEFW STATE_OPEN ; 2
279 0047' C200' DEFW STATE_READ_1 ; 3
280 0049' DA00' DEFW STATE_READ_2 ; 4
281 004B' F200' DEFW STATE_MOVE2RAM ; 5
282 004D' 2A01' DEFW STATE_CLOSE ; 6
283 004F' 3D01' DEFW STATE_PRE_IDLE ; 7
284 0051' 5401' DEFW WRITE_1
FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 6
285 ;*
286 ;* IF THE MACHINE IS IDLE IT'S OK TO TEST FOR ANOTHER READ REQUEST
287 ;*
288 0053' STATE_IDLE: ;STATE 0
289 0053' 3A 0000# LD A,[CSA] ;TEST THE COMMAND STATUS AREA
290 0056' B7 OR A
291 0057' CA 6A01' JP Z,END_OF_STATE_MACHINE
292 ;*
293 005A' NEXT_STATE 1
294 005A' 3E 01 A LD A,1 ;SOMETHING IN THE COMMAND BUFFER!
295 005C' 32 0000# A LD [TAPE_STATE],A
296 005F' 2A 4300' A LD HL,[STATE_VECTORS+1+1]
297 0062' 22 0000" A LD [NEXT_STATE_ADDRESS],HL
298 0065' C3 6A01' A JP END_OF_STATE_MACHINE
299 ;*
300 ;* ASSIGN THE SIM I/O FILE TO THE CURRENT OVERLAY NAME
301 ;*
302 0068' STATE_RENAME: ;STATE 1
303 0068' 3A 0000# LD A,[OVERLAY_NUMBER]
304 006B' 21 8701' LD HL,SAMPLE_NAME
305 006E' 11 0174 LD DE,RNAM_BUF ;POINT TO THE RENAME BUFFER IN THE COMMON ATTRIBUTES AREA
306 0071' 01 0400 LD BC,SAMPLE_NAME_LEN ;NO NAME COULD BE MORE THAN TEN BYTES LONG COULD IT?
307 0074' ED B0 LDIR ;MOVE THE OVERLAY DATA TO THE RENAME BUFFER
308 ;*
309 ;*
310 ;*
311 0076' 01 300A LD BC,10*256+"0" ;GET THE OVERLAY NUMBER INTO ASCII
312 0079' OV_2_ASCII_1:
313 0079' B7 OR A
314 007A' 98 SBC A,B ;DIVIDE OVERLAY NUMBER BY 10
315 007B' 0C INC C ;SET THE NUMBER OF TENS IN C (DOESN'T RESET CARRY)
316 007C' 30 FB JR NC,OV_2_ASCII_1 ;CARRY WAS SET BY SUBTRACT IF B>A
317 007E' 0D DEC C ;SAVE THE TENS BYTE
318 007F' 80 ADD A,B ;ADD TENS TO GET THE REMAINDER
319 0080' 06 30 LD B,"0" ;SAVE THE ONES BYTE
320 0082' 80 ADD A,B
321 0083' 47 LD B,A
322 0084' 79 LD A,C
323 0085' FE 30 CP "0" ;CONVERT TO ASCII
324 0087' 20 02 JR NZ,OV_2_ASCII_2
325 0089' 3E 5F LD A,"_" ;SPECIAL CASE
326 008B' OV_2_ASCII_2:
327 008B' 12 LD [DE],A ;DE IS POINTING TO THE FILENAME FROM THE LDIR ABOVE
328 008C' 13 INC DE
329 008D' 78 LD A,B
330 008E' 12 LD [DE],A
331 ;*
332 ;* ASSIGN THE FILE
333 ;*
334 008F' 3E 8A LD A,RENAME
335 0091' 32 0074 LD [CA],A
336 ;*
337 0094' NEXT_STATE 2 ;NEXT OPEN
338 0094' 3E 02 A LD A,2 ;SOMETHING IN THE COMMAND BUFFER!
339 0096' 32 0000# A LD [TAPE_STATE],A
340 0099' 2A 4500' A LD HL,[STATE_VECTORS+2+2]
341 009C' 22 0000" A LD [NEXT_STATE_ADDRESS],HL
FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 7
342 009F' C3 6A01' A JP END_OF_STATE_MACHINE
343 ;*
344 ;*
345 00A2' STATE_OPEN: ;STATE 2
346 ;*
347 ;* OPEN THE FILE
348 ;*
349 00A2' 3E 04 LD A,ABSOLUTE ;LOAD THE FILE TYPE
350 00A4' 32 0174 LD [FILETYPE],A
351 00A7' 3E 00 LD A,0 ;DISK NUMBER
352 00A9' 32 0274 LD [DISC_NUM],A
353 00AC' 3E 81 LD A,OPEN ;OPEN THE CURRENT FILE
354 00AE' 32 0074 LD [CA],A
355 00B1' 3A 0000# LD A,[CSA] ;NEXT STATE READ OR WRITE?
356 00B4' NEXT_STATE 3 ;NEXT STATE = READ_1
357 00B4' 3E 03 A LD A,3 ;SOMETHING IN THE COMMAND BUFFER!
358 00B6' 32 0000# A LD [TAPE_STATE],A
359 00B9' 2A 4700' A LD HL,[STATE_VECTORS+3+3]
360 00BC' 22 0000" A LD [NEXT_STATE_ADDRESS],HL
361 00BF' C3 6A01' A JP END_OF_STATE_MACHINE
362 00C2' STATE_READ_1: ;STATE 3
363 ;*
364 ;* READ THE FIRST RECORD TO SKIP OVER IT
365 ;*
366 00C2' 3E 80 LD A,MAXBUFLN ;SET THE INPUT BUFFER LENGTH
367 00C4' 32 0174 LD [BUF_LEN],A ;
368 00C7' 3E 87 LD A,READ
369 00C9' 32 0074 LD [CA],A ;READ THE FIRST RECORD
370
371 00CC' NEXT_STATE 4
372 00CC' 3E 04 A LD A,4 ;SOMETHING IN THE COMMAND BUFFER!
373 00CE' 32 0000# A LD [TAPE_STATE],A
374 00D1' 2A 4900' A LD HL,[STATE_VECTORS+4+4]
375 00D4' 22 0000" A LD [NEXT_STATE_ADDRESS],HL
376 00D7' C3 6A01' A JP END_OF_STATE_MACHINE
377
378 ;*
379 ;* READ REMAINING RECORDS AND MOVE TO RAM
380 ;*
381 00DA' STATE_READ_2: ;STATE 4
382 00DA' 3E 80 LD A,MAXBUFLN ;SET THE INPUT BUFFER LENGTH
383 00DC' 32 0174 LD [BUF_LEN],A ;
384 00DF' 3E 87 LD A,READ ;
385 00E1' 32 0074 LD [CA],A
386
387 00E4' NEXT_STATE 5 ;NEXT STATE = READ A DATA RECORD
388 00E4' 3E 05 A LD A,5 ;SOMETHING IN THE COMMAND BUFFER!
389 00E6' 32 0000# A LD [TAPE_STATE],A
390 00E9' 2A 4B00' A LD HL,[STATE_VECTORS+5+5]
391 00EC' 22 0000" A LD [NEXT_STATE_ADDRESS],HL
392 00EF' C3 6A01' A JP END_OF_STATE_MACHINE
393
394 ;*
395 ;* MOVE THE LAST BUFFER TO RAM
396 ;*
397 00F2' STATE_MOVE2RAM: ;STATE 5
398 00F2' 3A 0074 LD A,[CA] ;CHECK THE RETURN STATUS
FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 8
399 00F5' B7 OR A
400 00F6' 28 0E JR Z,NO_EOF ;END OF FILE?
401 ;*
402 ;*
403
404 00F8' NEXT_STATE 6 ;NEXT STATE = CLOSE FILE
405 00F8' 3E 06 A LD A,6 ;SOMETHING IN THE COMMAND BUFFER!
406 00FA' 32 0000# A LD [TAPE_STATE],A
407 00FD' 2A 4D00' A LD HL,[STATE_VECTORS+6+6]
408 0100' 22 0000" A LD [NEXT_STATE_ADDRESS],HL
409 0103' C3 6A01' A JP END_OF_STATE_MACHINE
410 0106' NO_EOF: ;MOVE THE CURRENT OVERLAY TO MEMORY
411 0106' 2A 0274 LD HL,[REC_LEN] ;GET THE NUMBER OF BYTES TO MOVE TO RAM
412 0109' 4C LD C,H
413 010A' 45 LD B,L
414 ;*
415 010B' 2A 0474 LD HL,[LOADADDR] ;GET THE LOAD ADDRESS AND CHECK TO SEE IF IT IS IN VRAM
416 010E' 55 LD D,L
417 010F' 5C LD E,H
418 0110' 21 0874 LD HL,BUFFER ;FROM ADDRESS
419
420 0113' 3A 0000# LD A,[CSA]
421 0116' FE ?? CP WRITE_TAPE
422 0118' 28 3A JR Z,WRITE_1
423
424 011A' ED B0 LDIR
425 ;*
426
427 011C' NEXT_STATE 4 ;NEXT STATE = READ A DATA RECORD
428 011C' 3E 04 A LD A,4 ;SOMETHING IN THE COMMAND BUFFER!
429 011E' 32 0000# A LD [TAPE_STATE],A
430 0121' 2A 4900' A LD HL,[STATE_VECTORS+4+4]
431 0124' 22 0000" A LD [NEXT_STATE_ADDRESS],HL
432 0127' C3 6A01' A JP END_OF_STATE_MACHINE
433 ;*
434 ;* CLOSE OVERLAY FILE
435 ;*
436 012A' STATE_CLOSE: ;STATE 6
437 012A' 3E 82 LD A,CLOSE ;CLOSE THE FILES
438 012C' 32 0074 LD [CA],A
439
440 012F' NEXT_STATE 7 ;NEXT STATE = PRE-IDLE
441 012F' 3E 07 A LD A,7 ;SOMETHING IN THE COMMAND BUFFER!
442 0131' 32 0000# A LD [TAPE_STATE],A
443 0134' 2A 4F00' A LD HL,[STATE_VECTORS+7+7]
444 0137' 22 0000" A LD [NEXT_STATE_ADDRESS],HL
445 013A' C3 6A01' A JP END_OF_STATE_MACHINE
446 ;*
447 ;*
448 ;* NEXT STATE IS IDLE
449 ;*
450 013D' STATE_PRE_IDLE: ;STATE 7
451 013D' 3E 00 LD A,0 ;NEXT STATE = PRE-IDLE
452 013F' 32 0000# LD [CSA],A ;CLEAR THE COMMAND STATUS BUFFER
453 0142' 3D DEC A
454 0143' 32 0000# LD [OVERLAY_NUMBER],A ;SET THE OVERLAY NUMBER TO OUT OF RANGE
455 0146' NEXT_STATE 0
FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 9
456 0146' 3E 00 A LD A,0 ;SOMETHING IN THE COMMAND BUFFER!
457 0148' 32 0000# A LD [TAPE_STATE],A
458 014B' 2A 4100' A LD HL,[STATE_VECTORS+0+0]
459 014E' 22 0000" A LD [NEXT_STATE_ADDRESS],HL
460 0151' C3 6A01' A JP END_OF_STATE_MACHINE
461 ;*
462 ;* WRITE OUT 256 DATA BYTES TO AN OVERLAY! OH BOY!
463 ;*
464 0154' WRITE_1: ;GET HERE FROM MOVE2RAM1
465 0154' EB EX DE,HL
466 0155' ED B0 LDIR
467 0157' 3E 89 LD A,WRITE
468 0159' 32 0074 LD [CA],A
469 015C' NEXT_STATE 6
470 015C' 3E 06 A LD A,6 ;SOMETHING IN THE COMMAND BUFFER!
471 015E' 32 0000# A LD [TAPE_STATE],A
472 0161' 2A 4D00' A LD HL,[STATE_VECTORS+6+6]
473 0164' 22 0000" A LD [NEXT_STATE_ADDRESS],HL
474 0167' C3 6A01' A JP END_OF_STATE_MACHINE
475 ;*
476 ;*
477 ;*
478
479 ; END (TAPE_MANAGER)
480
481 016A' END_OF_STATE_MACHINE:
482 016A' AF XOR A
483 016B' C9 RET
484 ;***************************************************************************
485 ;***************************************************************************
486 016C' ERROR:
487 ; BEGIN (Ordinarily registers are restored; retain only the pushes and pops you need.)
488
489 016C' 4F LD C,A
490 016D' 3A 0000# LD A,[OVERLAY_NUMBER] ;SAVE THE OVERLAY NUMBER IN A
491 0170' 47 LD B,A
492 0171' 3A 0000# LD A,[TAPE_STATE]
493 0174' 21 0000 LD HL,0 ;B HAS THE FUNCTION CODE
494 0177' 77 LD [HL],A ;C HAS THE ERROR CODE
495 ;
496 ; LD [HL] HAS JUST CAUSED A BINK TO OCCUR ON THE HP64000
497 ; THIS IS TO LET THE USER KNOW THERE HAS BEEN AN ERROR
498 ;
499 0178' AF XOR A
500 0179' 32 0074 LD [CA],A ;CLEAR THE ERROR FROM THE HP64000
501 017C' 3C INC A ;PRETEND THE ERROR WAS A CRC CHECK FROM ADAM'S TAPE
502 017D' 32 0000# LD [CSA],A
503 0180' 2A 4100' LD HL,[STATE_VECTORS+0000]
504 0183' 22 0000" LD [NEXT_STATE_ADDRESS],HL
505 0186' C9 RET
506
507 ; END (TAPE_ERR)
508
509 ;***************************************************************************
510 ;***************************************************************************
511 ;
512 ; OVERLAY NAMES
FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 10
513 ;
514 ; -------- -------- -------- -------- --------
515 ; :LENGTH :FILENAME ------> : USER ID :
516 ; :BYTE :UP TO 9 BYTES : UP TO 5 BYTES :
517 ; -------- -------- -------- -------- --------
518 ; LENGTH_BYTE := (((((LENGTH OF FILE NAME)+1)/2)-1)*32) + ((LENGTH OF USER ID)/2)*8)
519 ; FILENAME MUST BE ODD NUMBER OF BYTES LONG MAY BE PADDED WITH ONE SPACE.
520 ; USER ID MUST BE EVEN NUMBER OF BYTES LONG MAY BE PADDED WITH ONE SPACE.
521 ;
522 ;*****************************************************************************************
523 ;*****************************************************************************************
524 ;*
525 ;* OVERLAY NAME 0
526 ;*
527 0187' SAMPLE_NAME
528 0187' 40 OVLAY0 DEFB FL_NM_LN0*32+US_ID_LN0*8 ;LENGTH DESCRIPTION BYTE
529 0188' 4F 56 4C 5F NAM_0 DEFB "OVL_1" ;MUST BE ODD NUMBER OF LETTERS
530 018C' 31
531 018D' USID0 DEFB "" ;MUST BE EVEN NUMBER OF LETTERS
532 0002 FL_NM_LN0 EQU ((USID0-NAM_0+1)/2)-1 ;LENGTH OF FILENAME IN WORDS
533 0000 US_ID_LN0 EQU ($-USID0)/2 ;LENGTH OF USERID IN WORDS
534 0004 SAMPLE_NAME_LEN EQU $-SAMPLE_NAME-2 ;NUMBER OF BYTES TO MOVE = 4
535 ;***********************************************************************
536 DATA
537 GLOBAL NEXT_STATE_ADDRESS
538 0000" 0002 NEXT_STATE_ADDRESS DEFS 2 ;POINTER TO NEXT ENTRY STATE
539 0002" 0001 DEVICE_ID DEFS 1 ;DEVICE INDEPENDENCE SIMULATED
0 Error(s) Detected. 397 Program Bytes. 3 Data Bytes.
49 Symbols Detected.
FILE: TAPE_MANA:TOS HEWLETT-PACKARD: TAPE_MANAGER (c) Coleco 1983 Confidential Tue, 15 May 1984, 20:30 Page 11
Value Symbol Defined Referenced:
0004 ABSOLUTE 209 349
0029' AB_REQ 253 246 252
7408 BUFFER 204 418
7401 BUF_LEN 200 367 383
7400 CA 199 200 201 203 204 205 206 228 243 335 354 369 385 398 438 468 500
003D' CASE_STATE 270 255
0082 CLOSE 211 437
0000# CSA 191 229 253 289 355 420 452 502
0002" DEVICE_ID 539 196
7402 DISC_NUM 202 352
016A' END_OF_STATE_MACHINE
481 237 245 291 298 342 361 376 392 409 432 445 460 474
016C' ERROR 486 248
7401 FILETYPE 201 202 350
0002 FL_NM_LN0 532 528
0000' INITIALIZE_TAPE 224 223
0000' INIT_TAPE 226 225
0000# KILL_TAPE 189 254
7404 LOADADDR 206 415
0080 MAXBUFLN 208 366 382
0188' NAM_0 530 532
0000" NEXT_STATE_ADDRESS
538 236 273 297 341 360 375 391 408 431 444 459 473 504 537
0106' NO_EOF 410 400
0081 OPEN 210 353
0000# OVERLAY_NUMBER 193 231 303 454 490
0187' OVLAY0 528
0079' OV_2_ASCII_1 312 316
008B' OV_2_ASCII_2 326 324
0087 READ 212 368 384
7402 REC_LEN 203 411
008A RENAME 214 334
7401 RNAM_BUF 205 305
0187' SAMPLE_NAME 527 304 534
0004 SAMPLE_NAME_LEN 534 306
012A' STATE_CLOSE 436 262 282
0053' STATE_IDLE 288 276
00F2' STATE_MOVE2RAM 397 281
00A2' STATE_OPEN 345 278
013D' STATE_PRE_IDLE 450 259 283
00C2' STATE_READ_1 362 279
00DA' STATE_READ_2 381 280
0068' STATE_RENAME 302 277
0041' STATE_VECTORS 275 235 296 340 359 374 390 407 430 443 458 472 503
001B' TAPE_MANAGER 240 221
0000# TAPE_STATE 192 234 256 295 339 358 373 389 406 429 442 457 471 492
018D' USID0 531 532 533
0000 US_ID_LN0 533 528
0089 WRITE 213 467
0154' WRITE_1 464 284 422
0000# WRITE_TAPE 190 421